--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / Sideband.git / files / sbapp / kivymd / tools / release / update_icons.py
Displaying Raw • Download
sbapp/kivymd/tools/release/update_icons.py f8b3e3760b831745cf10d97aeae64e9c00a136a9 (f8b3e376) Text, 5.72 KB
T8b949e# Copyright (c) 2019-2022 Artem Bulgakov
T8b949e#
T8b949e# This file is distributed under the terms of the same license,
T8b949e# as the Kivy framework.
T8b949e"""
Tool for updating Iconic font
=============================
Downloads archive from https://github.com/Templarian/MaterialDesign-Webfont and
updates font file with icon_definitions.
"""
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72import T7ee787shutil
Tff7b72import T7ee787sys
Tff7b72import T7ee787zipfile
Tff7b72import T7ee787requests
Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffKIVY_NO_ARGSTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff1Ta5d6ff"
Tff7b72from T7ee787kivymdT7ee787.T7ee787toolsT7ee787.T7ee787releaseT7ee787.T7ee787git_commands Tff7b72import Te6edf3git_commit T8b949e# NOQA E402
T8b949e# Paths to files in kivymd repository
Te6edf3kivymd_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3font_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3kivymd_pathTb4b4b4, Ta5d6ff"Ta5d6fffontsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmaterialdesignicons-webfont.ttfTa5d6ff"
Tb4b4b4)
Te6edf3icon_definitions_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3kivymd_pathTb4b4b4, Ta5d6ff"Ta5d6fficon_definitions.pyTa5d6ff"Tb4b4b4)
Te6edf3font_version Tff7b72= Ta5d6ff"Ta5d6ffmasterTa5d6ff"
T8b949e# URL to download new archive (set None if already downloaded)
Te6edf3url Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffhttps://github.com/Templarian/MaterialDesign-WebfontTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff/archive/Tffd700{Te6edf3font_versionTffd700}Ta5d6ff.zipTa5d6ff"
Tb4b4b4)
T8b949e# url = None
T8b949e# Paths to files in loaded archive
Te6edf3temp_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fftempTa5d6ff"Tb4b4b4)
Te6edf3temp_repo_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3temp_pathTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffMaterialDesign-Webfont-Tffd700{Te6edf3font_versionTffd700}Ta5d6ff"
Tb4b4b4)
Te6edf3temp_font_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3temp_repo_pathTb4b4b4, Ta5d6ff"Ta5d6fffontsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmaterialdesignicons-webfont.ttfTa5d6ff"
Tb4b4b4)
Te6edf3temp_preview_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3temp_repo_pathTb4b4b4, Ta5d6ff"Ta5d6ffpreview.htmlTa5d6ff"Tb4b4b4)
T8b949e# Regex
Te6edf3re_icons_json Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<=var icons = )[Ta5d6ff\Ta5d6ffS ]+(?=;)Ta5d6ff"Tb4b4b4)
Te6edf3re_additional_icons Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<=iconsTa5d6ff\Ta5d6ff.pushTa5d6ff\Ta5d6ff()[Ta5d6ff\Ta5d6ffS ]+(?=Ta5d6ff\Ta5d6ff);)Ta5d6ff"Tb4b4b4)
Te6edf3re_version Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<=<span class=Tffea00\"Ta5d6ffversionTffea00\"Ta5d6ff>)[Ta5d6ff\Ta5d6ffd.]+(?=</span>)Ta5d6ff"Tb4b4b4)
Te6edf3re_quote_keys Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff([Ta5d6ff{Ta5d6ff\Ta5d6ffs,])(Ta5d6ff\Ta5d6ffw+)(:)Ta5d6ff"Tb4b4b4)
Te6edf3re_icon_definitions Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ffmd_icons = Ta5d6ff{Ta5d6ff\Ta5d6ffn([ ]Tffd700{4}Ta5d6ff[Ta5d6ff\Ta5d6ffsTa5d6ff\Ta5d6ffS]*,Ta5d6ff\Ta5d6ffn)*}Ta5d6ff"Tb4b4b4)
Te6edf3re_version_in_file Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<=LAST UPDATED: Version )[Ta5d6ff\Ta5d6ffd.]+(?=Ta5d6ff\Ta5d6ffn)Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffdownload_fileTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Te6edf3response Tff7b72= Te6edf3requestsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3streamTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3responseTff7b72.Td2a8ffstatus_code Tff7b72!= T79c0ff200Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffcopyfileobjTb4b4b4(Te6edf3responseTff7b72.Td2a8ffrawTb4b4b4, Te6edf3fTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffunzip_archiveTb4b4b4(Te6edf3archive_pathTb4b4b4, Te6edf3dir_pathTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3archive_pathTb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zip_refTb4b4b4:
Te6edf3zip_refTff7b72.Td2a8ffextractallTb4b4b4(Te6edf3dir_pathTb4b4b4)
Tff7b72def Td2a8ffget_icons_listTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e# There is js array with icons in file preview.html
Tff7b72with Tffa657openTb4b4b4(Te6edf3temp_preview_pathTb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3preview_file Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
T8b949e# Find version
Te6edf3version Tff7b72= Te6edf3re_versionTff7b72.Td2a8fffindallTb4b4b4(Te6edf3preview_fileTb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
T8b949e# Load icons
Te6edf3jsons_icons Tff7b72= Te6edf3re_icons_jsonTff7b72.Td2a8fffindallTb4b4b4(Te6edf3preview_fileTb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3json_icons Tff7b72= Te6edf3re_quote_keysTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ffrTa5d6ff'Ta5d6ff\Ta5d6ff1Ta5d6ff"Ta5d6ff\Ta5d6ff2Ta5d6ff"Ta5d6ff\Ta5d6ff3Ta5d6ff'Tb4b4b4, Te6edf3jsons_iconsTb4b4b4)
Te6edf3icons Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3json_iconsTb4b4b4)
T8b949e# Find additional icons (like a blank icon)
T8b949e# jsons_additional_icons = re_additional_icons.findall(preview_file)
T8b949e# for j in jsons_additional_icons:
T8b949e# json_additional_icons = re_quote_keys.sub(r'\1"\2"\3', j)
T8b949e# icons.append(json.loads(json_additional_icons))
Tff7b72return Te6edf3iconsTb4b4b4, Te6edf3version
Tff7b72def Td2a8ffmake_icon_definitionsTb4b4b4(Te6edf3iconsTb4b4b4)Tb4b4b4:
T8b949e# Make python dict ("name": hex)
Te6edf3icon_definitions Tff7b72= Ta5d6ff"Ta5d6ffmd_icons = Ta5d6ff{Tffea00\nTa5d6ff"
Tff7b72for Te6edf3i Tff7b72in Te6edf3iconsTb4b4b4:
Te6edf3icon_definitions Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff" Tff7b72* T79c0ff4
Tff7b72if Tffa657lenTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffhexTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72!= T79c0ff4Tb4b4b4:
T8b949e# Some icons has 5-digit unicode
Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffhexTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff0Ta5d6ff" Tff7b72* Tb4b4b4(T79c0ff8 Tff7b72- Tffa657lenTb4b4b4(Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffhexTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4) Tff7b72+ Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffhexTa5d6ff"Tb4b4b4]
Te6edf3icon_definitions Tff7b72+Tff7b72= Ta5d6fffTa5d6ff'Ta5d6ff"Tffd700{Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tffd700}Ta5d6ff"Ta5d6ff: Ta5d6ff"Tffea00\\Ta5d6ffUTffd700{Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffhexTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupperTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff'
Tff7b72elseTb4b4b4:
Te6edf3icon_definitions Tff7b72+Tff7b72= Ta5d6fffTa5d6ff'Ta5d6ff"Tffd700{Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tffd700}Ta5d6ff"Ta5d6ff: Ta5d6ff"Tffea00\\Ta5d6ffuTffd700{Te6edf3iTb4b4b4[Ta5d6ff"Ta5d6ffhexTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupperTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff'
Te6edf3icon_definitions Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff" Tff7b72* T79c0ff4 Tff7b72+ Ta5d6ff'Ta5d6ff"Ta5d6ffblankTa5d6ff"Ta5d6ff: Ta5d6ff"Ta5d6ff Ta5d6ff"Ta5d6ff,Tffea00\nTa5d6ff' T8b949e# Add blank icon (space)
Te6edf3icon_definitions Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff}Ta5d6ff"
Tff7b72return Te6edf3icon_definitions
Tff7b72def Td2a8ffexport_icon_definitionsTb4b4b4(Te6edf3icon_definitionsTb4b4b4, Te6edf3versionTb4b4b4)Tb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3icon_definitions_pathTb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3icon_definitions_file Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
T8b949e# Change md_icons list
Te6edf3new_icon_definitions Tff7b72= Te6edf3re_icon_definitionsTff7b72.Td2a8ffsubTb4b4b4(
Te6edf3icon_definitionsTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Tffea00\\Tffea00\\Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3icon_definitions_fileTb4b4b4, T79c0ff1
Tb4b4b4)
T8b949e# Change version
Te6edf3new_icon_definitions Tff7b72= Te6edf3re_version_in_fileTff7b72.Td2a8ffsubTb4b4b4(
Te6edf3versionTb4b4b4, Te6edf3new_icon_definitionsTb4b4b4, T79c0ff1
Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3icon_definitions_pathTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3new_icon_definitionsTb4b4b4)
Tff7b72def Td2a8ffupdate_iconsTb4b4b4(Te6edf3make_commitTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3url Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffDownloading Material Design Icons from Tffd700{Te6edf3urlTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3download_fileTb4b4b4(Te6edf3urlTb4b4b4, Ta5d6ff"Ta5d6fficonic-font.zipTa5d6ff"Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffArchive downloadedTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffError: Could not download archiveTa5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffURL is None. Do not download archiveTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Ta5d6ff"Ta5d6fficonic-font.zipTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3unzip_archiveTb4b4b4(Ta5d6ff"Ta5d6fficonic-font.zipTa5d6ff"Tb4b4b4, Te6edf3temp_pathTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffUnzip successfulTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Ta5d6ff"Ta5d6fficonic-font.zipTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3temp_repo_pathTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffcopy2Tb4b4b4(Te6edf3temp_font_pathTb4b4b4, Te6edf3font_pathTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffFont copiedTa5d6ff"Tb4b4b4)
Te6edf3iconsTb4b4b4, Te6edf3version Tff7b72= Te6edf3get_icons_listTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffVersion Tffd700{Te6edf3versionTffd700}Ta5d6ff. Tffd700{Tffa657lenTb4b4b4(Te6edf3iconsTb4b4b4)Tffd700}Ta5d6ff icons loadedTa5d6ff"Tb4b4b4)
Te6edf3icon_definitions Tff7b72= Te6edf3make_icon_definitionsTb4b4b4(Te6edf3iconsTb4b4b4)
Te6edf3export_icon_definitionsTb4b4b4(Te6edf3icon_definitionsTb4b4b4, Te6edf3versionTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffFile icon_definitions.py updatedTa5d6ff"Tb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3temp_pathTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3make_commitTb4b4b4:
Te6edf3git_commitTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffUpdate Iconic font (vTffd700{Te6edf3versionTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4,
Te6edf3allow_errorTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3add_filesTff7b72=Tb4b4b4[
Ta5d6ff"Ta5d6ffkivymd/icon_definitions.pyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffkivymd/fonts/materialdesignicons-webfont.ttfTa5d6ff"Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ffSuccessful. You can now push changesTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff'Tffea00\nTa5d6ffSuccessful. Commit message: Ta5d6ff"Ta5d6ffUpdate Iconic font (vTffd700{Te6edf3versionTffd700}Ta5d6ff)Ta5d6ff"Ta5d6ff'
Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError: Tffd700{Te6edf3temp_repo_pathTffd700}Ta5d6ff not existsTa5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3make_commit Tff7b72= Ta5d6ff"Ta5d6ff--commitTa5d6ff" Tff7b72in Te6edf3sysTff7b72.Td2a8ffargv
Tff7b72if Ta5d6ff"Ta5d6ff--commitTa5d6ff" Tff7b72in Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4:
Te6edf3sysTff7b72.Td2a8ffargvTff7b72.Td2a8ffremoveTb4b4b4(Ta5d6ff"Ta5d6ff--commitTa5d6ff"Tb4b4b4)
Te6edf3update_iconsTb4b4b4(Te6edf3make_commitTff7b72=Te6edf3make_commitTb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────